package satk.database;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import java.util.List;
import satk.beans.interfaces.IntControlManagerDB;
import satk.objetos.ControlCategoria;

/**
 * <h3>ManagerControlCategoria.java</h3>
 * <div><em>Fecha de creación: 15/05/2011, 08:00:10 PM.</em></div>
 * <p></p>
 * @author Sergio Flores Genis <sf.cancun@gmail.com>
 */
public class ManagerControlCategoria extends DBManager
        implements IntControlManagerDB<ControlCategoria> {

    public ManagerControlCategoria(Connection c) {
        super(c);
    }

    public ManagerControlCategoria() {
        super();
    }

    @Override
    public ControlCategoria getById(long id) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public List<ControlCategoria> getAll() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    /**
     * Metodo para agregar una nueva categoria de torneo
     * @param o Categoria de torneo que seguardara.
     * @return
     * <table >
     *  <tr>
     *      <td><strong>-5:</strong></td>
     *      <td>Si ya existe la categoria de competencia ya existe</td>
     *  </tr>
     *  <tr>
     *      <td><strong> >0</strong> </td>
     *      <td>Registrada exitosamente</td>
     *  </tr>
     * </table>
     * @throws SQLException 
     */
    @Override
    public int add(ControlCategoria o) throws SQLException {

        // Se comprueba que la categoria no se encuentre registrada
        String queryExist = "SELECT * FROM categoria WHERE "
                + "(idc_categoria = ?) AND (idc_cinta = ?) AND (id_evento = ?);";
        PreparedStatement pstmExist = getConexion().prepareStatement(queryExist);
        pstmExist.setInt(1, o.getCategoria().getIdentificador());
        pstmExist.setInt(2, o.getCinta().getIdentificador());
        pstmExist.setInt(3, o.getIdEvento());
        boolean existe = pstmExist.executeQuery().first();
        if (existe) {
            return (-5);
        }

        // Se comprueba que la categoria existe, si no existe se registra.
        String queryExistCategoria = "SELECT * FROM c_categoria WHERE (nomc_categoria = ?);";
        PreparedStatement pstmExistCategoria = getConexion().prepareStatement(queryExistCategoria);
        pstmExistCategoria.setString(1, o.getCategoria().getNombre());

        boolean existeCategoria = pstmExistCategoria.executeQuery().first();
        ManagerCategoria mCategoria = new ManagerCategoria(getConexion());
        if (existeCategoria) {
            o.setCategoria(mCategoria.getByName(o.getCategoria().getNombre()));
        } else {
            mCategoria.add(o.getCategoria());
        }

        // Se comprueba que la cinta existe, si no existe se registra
        String queryExistCinta = "SELECT * FROM c_cinta WHERE (colc_cinta = ?);";
        PreparedStatement pstmExistCinta = getConexion().prepareStatement(queryExistCinta);
        pstmExistCinta.setString(1, o.getCinta().getColor());

        boolean existeCinta = pstmExistCinta.executeQuery().first();
        ManagerCinta mCinta = new ManagerCinta(getConexion());
        if (existeCinta) {
            o.setCinta(mCinta.getByColor(o.getCinta().getColor()));
        } else {
            mCinta.add(o.getCinta());
        }

        String query = "INSERT INTO categoria ("
                + "idc_categoria, idc_cinta, fem_categoria, var_categoria,"
                + "kai_categoria, kae_categoria, kue_categoria, kua_categoria, "
                + "id_evento ) VALUES ("
                + "?, ?, ?, ?, ?, ?, ?, ?, ?);";
        Prepare par = new Prepare(13);
        par.add(o.getCategoria().getIdentificador(), Types.INTEGER);
        par.add(o.getCinta().getIdentificador(), Types.INTEGER);
        par.add(o.isSexFemenil(), Types.TINYINT);
        par.add(o.isSexVaronil(), Types.TINYINT);
        par.add(o.isModKai(), Types.TINYINT);
        par.add(o.isModKae(), Types.TINYINT);
        par.add(o.isModKue(), Types.TINYINT);
        par.add(o.isModKuo(), Types.TINYINT);
        par.add(o.getIdEvento(), Types.INTEGER);

        int resp = this.edit(query, par);
        int identificador = this.getLastIdInsert();
        o.setIdentificador(identificador);
        this.closeConexion();
        return resp;
    }

    @Override
    public int update(ControlCategoria o, ControlCategoria n) throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public int remove(ControlCategoria o) throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
